package com.example.kt_base.s5

//TODO 89.Kotlin语言的对象表达式

interface RunnableKt{
    fun run(){}
}
open class KtBase89 {
    open fun add(info: String) {
        println("KtBase89 add:$info")
    }

    open fun del(info: String) {
        println("KtBase89 del:$info")
    }
}

class KtBase89Impl : KtBase89() {
   /* override fun add(info: String) {
        // super.add(info)
        println("我是具名对象 add:$info")
    }
*/
    override fun del(info: String) {
        // super.del(info)
        println("我是具名对象 del:$info")
    }
}

fun main() {

    //匿名方式
    val p = object : KtBase89() {
        override fun add(info: String) {
            // super.add(info)
            println("我是匿名对象 add:$info")
        }

        override fun del(info: String) {
            // super.del(info)
            println("我是匿名对象 del:$info")
        }
    }
    p.add("li")
    p.del("deng")


    //具名方式
    val s = KtBase89Impl()
    s.add("cheng")
    s.del("cheng")

    //对java接口 用对象表达式的方式
    val p1=object :Runnable{
        override fun run() {
            println("Runnable run...")
        }
    }
    p1.run()

    //对java 的接口 用java最简洁的方式
    val p2=Runnable{
        println("Runnable run...")
    }
    p2.run()


    //对Kt的接口用kt的对象表达式
    val p3=object :RunnableKt{
        override fun run() {
            println("RunnableKt run...")
        }
    }
    p3.run()


}
